D:\git\skunkworks\herald-for-cpp\herald\include\herald\analysis\runner.h
Line | Count | Source (jump to first uncovered line) |
1 | | // Copyright 2021 Herald Project Contributors |
2 | | // SPDX-License-Identifier: Apache-2.0 |
3 | | // |
4 | | |
5 | | #ifndef HERALD_ANALYSIS_RUNNER_H |
6 | | #define HERALD_ANALYSIS_RUNNER_H |
7 | | |
8 | | #include "sampling.h" |
9 | | |
10 | | #include <variant> |
11 | | #include <array> |
12 | | |
13 | | // debug only |
14 | | // #include <iostream> |
15 | | |
16 | | namespace herald { |
17 | | namespace analysis { |
18 | | |
19 | | using namespace sampling; |
20 | | |
21 | | /// \brief Manages a set of lists for a particular Sample Value Type |
22 | | template <typename ValT, std::size_t Size> |
23 | | struct ListManager { |
24 | | using value_type = ValT; |
25 | | static constexpr std::size_t max_size = Size; |
26 | | |
27 | 28 | ListManager() = default; ??0?$ListManager@H$0P@@analysis@herald@@QEAA@XZ Line | Count | Source | 27 | 3 | ListManager() = default; |
??0?$ListManager@N$0P@@analysis@herald@@QEAA@XZ Line | Count | Source | 27 | 1 | ListManager() = default; |
??0?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@QEAA@XZ Line | Count | Source | 27 | 18 | ListManager() = default; |
??0?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@QEAA@XZ Line | Count | Source | 27 | 6 | ListManager() = default; |
|
28 | 28 | ~ListManager() = default; ??1?$ListManager@H$0P@@analysis@herald@@QEAA@XZ Line | Count | Source | 28 | 3 | ~ListManager() = default; |
??1?$ListManager@N$0P@@analysis@herald@@QEAA@XZ Line | Count | Source | 28 | 1 | ~ListManager() = default; |
??1?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@QEAA@XZ Line | Count | Source | 28 | 18 | ~ListManager() = default; |
??1?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@QEAA@XZ Line | Count | Source | 28 | 6 | ~ListManager() = default; |
|
29 | | |
30 | 57 | SampleList<Sample<ValT>,Size>& list(const SampledID sampled) { |
31 | 57 | auto iter = lists.try_emplace(sampled).first; |
32 | 57 | return lists.at(sampled); |
33 | 57 | } ?list@?$ListManager@H$0P@@analysis@herald@@QEAAAEAU?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@23@_K@Z Line | Count | Source | 30 | 2 | SampleList<Sample<ValT>,Size>& list(const SampledID sampled) { | 31 | 2 | auto iter = lists.try_emplace(sampled).first; | 32 | 2 | return lists.at(sampled); | 33 | 2 | } |
?list@?$ListManager@N$0P@@analysis@herald@@QEAAAEAU?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@sampling@23@_K@Z Line | Count | Source | 30 | 2 | SampleList<Sample<ValT>,Size>& list(const SampledID sampled) { | 31 | 2 | auto iter = lists.try_emplace(sampled).first; | 32 | 2 | return lists.at(sampled); | 33 | 2 | } |
?list@?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@QEAAAEAU?$SampleList@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@$0BJ@VRSSI@datatype@4@@sampling@23@_K@Z Line | Count | Source | 30 | 28 | SampleList<Sample<ValT>,Size>& list(const SampledID sampled) { | 31 | 28 | auto iter = lists.try_emplace(sampled).first; | 32 | 28 | return lists.at(sampled); | 33 | 28 | } |
?list@?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@QEAAAEAU?$SampleList@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@$0BJ@UDistance@datatype@4@@sampling@23@_K@Z Line | Count | Source | 30 | 25 | SampleList<Sample<ValT>,Size>& list(const SampledID sampled) { | 31 | 25 | auto iter = lists.try_emplace(sampled).first; | 32 | 25 | return lists.at(sampled); | 33 | 25 | } |
|
34 | | |
35 | | void remove(const SampledID listFor) { |
36 | | lists.erase(listFor); |
37 | | } |
38 | | |
39 | 4 | const std::size_t size() const { |
40 | 4 | return lists.size(); |
41 | 4 | } ?size@?$ListManager@H$0P@@analysis@herald@@QEBA?B_KXZ Line | Count | Source | 39 | 2 | const std::size_t size() const { | 40 | 2 | return lists.size(); | 41 | 2 | } |
?size@?$ListManager@N$0P@@analysis@herald@@QEBA?B_KXZ Line | Count | Source | 39 | 2 | const std::size_t size() const { | 40 | 2 | return lists.size(); | 41 | 2 | } |
|
42 | | |
43 | 36 | decltype(auto) begin() { |
44 | 36 | return lists.begin(); |
45 | 36 | } ?begin@?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@QEAA?A?<decltype-auto>@@XZ Line | Count | Source | 43 | 18 | decltype(auto) begin() { | 44 | 18 | return lists.begin(); | 45 | 18 | } |
?begin@?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@QEAA?A?<decltype-auto>@@XZ Line | Count | Source | 43 | 18 | decltype(auto) begin() { | 44 | 18 | return lists.begin(); | 45 | 18 | } |
|
46 | | |
47 | 36 | decltype(auto) end() { |
48 | 36 | return lists.end(); |
49 | 36 | } ?end@?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@QEAA?A?<decltype-auto>@@XZ Line | Count | Source | 47 | 18 | decltype(auto) end() { | 48 | 18 | return lists.end(); | 49 | 18 | } |
?end@?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@QEAA?A?<decltype-auto>@@XZ Line | Count | Source | 47 | 18 | decltype(auto) end() { | 48 | 18 | return lists.end(); | 49 | 18 | } |
|
50 | | |
51 | | private: |
52 | | std::map<SampledID,SampleList<Sample<ValT>,Size>> lists; |
53 | | }; |
54 | | |
55 | | /// \brief A fixed size set that holds exactly one instance of the std::variant for each |
56 | | /// of the specified ValTs value types. |
57 | | template <typename... ValTs> |
58 | | struct VariantSet { |
59 | | static constexpr std::size_t Size = sizeof...(ValTs); |
60 | | |
61 | 9 | VariantSet() : variants() { |
62 | 9 | createInstances<ValTs...>(0); |
63 | 9 | }; // Instantiate each type instance in the array ??0?$VariantSet@HN@analysis@herald@@QEAA@XZ Line | Count | Source | 61 | 1 | VariantSet() : variants() { | 62 | 1 | createInstances<ValTs...>(0); | 63 | 1 | }; // Instantiate each type instance in the array |
??0?$VariantSet@U?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@analysis@herald@@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@234@@analysis@herald@@QEAA@XZ Line | Count | Source | 61 | 1 | VariantSet() : variants() { | 62 | 1 | createInstances<ValTs...>(0); | 63 | 1 | }; // Instantiate each type instance in the array |
??0?$VariantSet@U?$ListManager@H$0P@@analysis@herald@@U?$ListManager@N$0P@@23@@analysis@herald@@QEAA@XZ Line | Count | Source | 61 | 1 | VariantSet() : variants() { | 62 | 1 | createInstances<ValTs...>(0); | 63 | 1 | }; // Instantiate each type instance in the array |
??0?$VariantSet@U?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@U?$ListManager@UDistance@datatype@herald@@$0BJ@@23@@analysis@herald@@QEAA@XZ Line | Count | Source | 61 | 6 | VariantSet() : variants() { | 62 | 6 | createInstances<ValTs...>(0); | 63 | 6 | }; // Instantiate each type instance in the array |
|
64 | 8 | ~VariantSet() = default; ??1?$VariantSet@U?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@analysis@herald@@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@234@@analysis@herald@@QEAA@XZ Line | Count | Source | 64 | 1 | ~VariantSet() = default; |
??1?$VariantSet@U?$ListManager@H$0P@@analysis@herald@@U?$ListManager@N$0P@@23@@analysis@herald@@QEAA@XZ Line | Count | Source | 64 | 1 | ~VariantSet() = default; |
??1?$VariantSet@U?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@U?$ListManager@UDistance@datatype@herald@@$0BJ@@23@@analysis@herald@@QEAA@XZ Line | Count | Source | 64 | 6 | ~VariantSet() = default; |
|
65 | | |
66 | | /// CAN THROW std::bad_variant_access |
67 | | template <typename ValT> |
68 | 46 | ValT& get() { |
69 | 59 | for (auto& v : variants) { |
70 | 59 | if (auto pval = std::get_if<ValT>(&v)) { |
71 | 46 | return *pval; |
72 | 46 | } |
73 | 59 | } |
74 | 46 | throw std::bad_variant_access()0 ; |
75 | 46 | } ??$get@H@?$VariantSet@HN@analysis@herald@@QEAAAEAHXZ Line | Count | Source | 68 | 1 | ValT& get() { | 69 | 1 | for (auto& v : variants) { | 70 | 1 | if (auto pval = std::get_if<ValT>(&v)) { | 71 | 1 | return *pval; | 72 | 1 | } | 73 | 1 | } | 74 | 1 | throw std::bad_variant_access()0 ; | 75 | 1 | } |
??$get@N@?$VariantSet@HN@analysis@herald@@QEAAAEANXZ Line | Count | Source | 68 | 1 | ValT& get() { | 69 | 2 | for (auto& v : variants) { | 70 | 2 | if (auto pval = std::get_if<ValT>(&v)) { | 71 | 1 | return *pval; | 72 | 1 | } | 73 | 2 | } | 74 | 1 | throw std::bad_variant_access()0 ; | 75 | 1 | } |
??$get@U?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@analysis@herald@@@?$VariantSet@U?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@analysis@herald@@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@234@@analysis@herald@@QEAAAEAU?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@12@XZ Line | Count | Source | 68 | 2 | ValT& get() { | 69 | 2 | for (auto& v : variants) { | 70 | 2 | if (auto pval = std::get_if<ValT>(&v)) { | 71 | 2 | return *pval; | 72 | 2 | } | 73 | 2 | } | 74 | 2 | throw std::bad_variant_access()0 ; | 75 | 2 | } |
??$get@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@sampling@analysis@herald@@@?$VariantSet@U?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@analysis@herald@@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@234@@analysis@herald@@QEAAAEAU?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@sampling@12@XZ Line | Count | Source | 68 | 2 | ValT& get() { | 69 | 4 | for (auto& v : variants) { | 70 | 4 | if (auto pval = std::get_if<ValT>(&v)) { | 71 | 2 | return *pval; | 72 | 2 | } | 73 | 4 | } | 74 | 2 | throw std::bad_variant_access()0 ; | 75 | 2 | } |
??$get@U?$ListManager@H$0P@@analysis@herald@@@?$VariantSet@U?$ListManager@H$0P@@analysis@herald@@U?$ListManager@N$0P@@23@@analysis@herald@@QEAAAEAU?$ListManager@H$0P@@12@XZ Line | Count | Source | 68 | 2 | ValT& get() { | 69 | 2 | for (auto& v : variants) { | 70 | 2 | if (auto pval = std::get_if<ValT>(&v)) { | 71 | 2 | return *pval; | 72 | 2 | } | 73 | 2 | } | 74 | 2 | throw std::bad_variant_access()0 ; | 75 | 2 | } |
??$get@U?$ListManager@N$0P@@analysis@herald@@@?$VariantSet@U?$ListManager@H$0P@@analysis@herald@@U?$ListManager@N$0P@@23@@analysis@herald@@QEAAAEAU?$ListManager@N$0P@@12@XZ Line | Count | Source | 68 | 2 | ValT& get() { | 69 | 4 | for (auto& v : variants) { | 70 | 4 | if (auto pval = std::get_if<ValT>(&v)) { | 71 | 2 | return *pval; | 72 | 2 | } | 73 | 4 | } | 74 | 2 | throw std::bad_variant_access()0 ; | 75 | 2 | } |
??$get@U?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@?$VariantSet@U?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@U?$ListManager@UDistance@datatype@herald@@$0BJ@@23@@analysis@herald@@QEAAAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@12@XZ Line | Count | Source | 68 | 28 | ValT& get() { | 69 | 28 | for (auto& v : variants) { | 70 | 28 | if (auto pval = std::get_if<ValT>(&v)) { | 71 | 28 | return *pval; | 72 | 28 | } | 73 | 28 | } | 74 | 28 | throw std::bad_variant_access()0 ; | 75 | 28 | } |
??$get@U?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@?$VariantSet@U?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@U?$ListManager@UDistance@datatype@herald@@$0BJ@@23@@analysis@herald@@QEAAAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@12@XZ Line | Count | Source | 68 | 8 | ValT& get() { | 69 | 16 | for (auto& v : variants) { | 70 | 16 | if (auto pval = std::get_if<ValT>(&v)) { | 71 | 8 | return *pval; | 72 | 8 | } | 73 | 16 | } | 74 | 8 | throw std::bad_variant_access()0 ; | 75 | 8 | } |
|
76 | | |
77 | 3 | const std::size_t size() const { |
78 | 3 | return variants.size(); |
79 | 3 | } ?size@?$VariantSet@HN@analysis@herald@@QEBA?B_KXZ Line | Count | Source | 77 | 1 | const std::size_t size() const { | 78 | 1 | return variants.size(); | 79 | 1 | } |
?size@?$VariantSet@U?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@analysis@herald@@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@234@@analysis@herald@@QEBA?B_KXZ Line | Count | Source | 77 | 1 | const std::size_t size() const { | 78 | 1 | return variants.size(); | 79 | 1 | } |
?size@?$VariantSet@U?$ListManager@H$0P@@analysis@herald@@U?$ListManager@N$0P@@23@@analysis@herald@@QEBA?B_KXZ Line | Count | Source | 77 | 1 | const std::size_t size() const { | 78 | 1 | return variants.size(); | 79 | 1 | } |
|
80 | | |
81 | 52 | decltype(auto) begin() { |
82 | 52 | return variants.begin(); |
83 | 52 | } |
84 | | |
85 | 52 | decltype(auto) end() { |
86 | 52 | return variants.end(); |
87 | 52 | } |
88 | | |
89 | | private: |
90 | | std::array<std::variant<ValTs...>,Size> variants; |
91 | | template <typename LastT> |
92 | 9 | void createInstances(int pos) { |
93 | 9 | variants[pos].template emplace<LastT>(); |
94 | 9 | } ??$createInstances@N@?$VariantSet@HN@analysis@herald@@AEAAXH@Z Line | Count | Source | 92 | 1 | void createInstances(int pos) { | 93 | 1 | variants[pos].template emplace<LastT>(); | 94 | 1 | } |
??$createInstances@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@sampling@analysis@herald@@@?$VariantSet@U?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@analysis@herald@@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@234@@analysis@herald@@AEAAXH@Z Line | Count | Source | 92 | 1 | void createInstances(int pos) { | 93 | 1 | variants[pos].template emplace<LastT>(); | 94 | 1 | } |
??$createInstances@U?$ListManager@N$0P@@analysis@herald@@@?$VariantSet@U?$ListManager@H$0P@@analysis@herald@@U?$ListManager@N$0P@@23@@analysis@herald@@AEAAXH@Z Line | Count | Source | 92 | 1 | void createInstances(int pos) { | 93 | 1 | variants[pos].template emplace<LastT>(); | 94 | 1 | } |
??$createInstances@U?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@?$VariantSet@U?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@U?$ListManager@UDistance@datatype@herald@@$0BJ@@23@@analysis@herald@@AEAAXH@Z Line | Count | Source | 92 | 6 | void createInstances(int pos) { | 93 | 6 | variants[pos].template emplace<LastT>(); | 94 | 6 | } |
|
95 | | |
96 | | template <typename FirstT, typename SecondT, typename... RestT> |
97 | 9 | void createInstances(int pos) { |
98 | 9 | variants[pos].template emplace<FirstT>(); |
99 | 9 | createInstances<SecondT,RestT...>(pos + 1); |
100 | 9 | } ??$createInstances@HN$$V@?$VariantSet@HN@analysis@herald@@AEAAXH@Z Line | Count | Source | 97 | 1 | void createInstances(int pos) { | 98 | 1 | variants[pos].template emplace<FirstT>(); | 99 | 1 | createInstances<SecondT,RestT...>(pos + 1); | 100 | 1 | } |
??$createInstances@U?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@analysis@herald@@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@234@$$V@?$VariantSet@U?$SampleList@U?$Sample@H@sampling@analysis@herald@@$0P@H@sampling@analysis@herald@@U?$SampleList@U?$Sample@N@sampling@analysis@herald@@$0P@N@234@@analysis@herald@@AEAAXH@Z Line | Count | Source | 97 | 1 | void createInstances(int pos) { | 98 | 1 | variants[pos].template emplace<FirstT>(); | 99 | 1 | createInstances<SecondT,RestT...>(pos + 1); | 100 | 1 | } |
??$createInstances@U?$ListManager@H$0P@@analysis@herald@@U?$ListManager@N$0P@@23@$$V@?$VariantSet@U?$ListManager@H$0P@@analysis@herald@@U?$ListManager@N$0P@@23@@analysis@herald@@AEAAXH@Z Line | Count | Source | 97 | 1 | void createInstances(int pos) { | 98 | 1 | variants[pos].template emplace<FirstT>(); | 99 | 1 | createInstances<SecondT,RestT...>(pos + 1); | 100 | 1 | } |
??$createInstances@U?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@U?$ListManager@UDistance@datatype@herald@@$0BJ@@23@$$V@?$VariantSet@U?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@U?$ListManager@UDistance@datatype@herald@@$0BJ@@23@@analysis@herald@@AEAAXH@Z Line | Count | Source | 97 | 6 | void createInstances(int pos) { | 98 | 6 | variants[pos].template emplace<FirstT>(); | 99 | 6 | createInstances<SecondT,RestT...>(pos + 1); | 100 | 6 | } |
|
101 | | }; |
102 | | |
103 | | /// \brief Convenience wrapper for all AnalysisDelegate types used by the analysis API |
104 | | template <typename... DelegateTypes> |
105 | | struct AnalysisDelegateManager { |
106 | 6 | AnalysisDelegateManager(DelegateTypes... dts) : delegates() { |
107 | 6 | addDelegates(0,dts...); |
108 | 6 | } ??0?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@QEAA@UDummyDistanceDelegate@@@Z Line | Count | Source | 106 | 5 | AnalysisDelegateManager(DelegateTypes... dts) : delegates() { | 107 | 5 | addDelegates(0,dts...); | 108 | 5 | } |
??0?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@QEAA@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@12@@Z Line | Count | Source | 106 | 1 | AnalysisDelegateManager(DelegateTypes... dts) : delegates() { | 107 | 1 | addDelegates(0,dts...); | 108 | 1 | } |
|
109 | 6 | ~AnalysisDelegateManager() = default; ??1?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@QEAA@XZ Line | Count | Source | 109 | 5 | ~AnalysisDelegateManager() = default; |
??1?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@QEAA@XZ Line | Count | Source | 109 | 1 | ~AnalysisDelegateManager() = default; |
|
110 | | |
111 | | template <typename ValT> |
112 | 36 | void notify(SampledID sampled, Sample<ValT> sample) { |
113 | 41 | for (auto& delegateV : delegates) { |
114 | 41 | std::visit([sampled,sample](auto&& arg) { |
115 | 41 | using noref = typename std::remove_reference<decltype(arg)>::type; |
116 | 41 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) {0 |
117 | 9 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function |
118 | 9 | } |
119 | 41 | }, delegateV); ??$?RAEAUDummyDistanceDelegate@@@<lambda_1>@?0???$notify@VRSSI@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@QEAAX_KU?$Sample@VRSSI@datatype@herald@@@sampling@23@@Z@QEBA?A?<auto>@@AEAUDummyDistanceDelegate@@@Z Line | Count | Source | 114 | 24 | std::visit([sampled,sample](auto&& arg) { | 115 | 24 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 24 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) {0 | 117 | 24 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 24 | } | 119 | 24 | }, delegateV); |
??$?RAEAUDummyDistanceDelegate@@@<lambda_1>@?0???$notify@UDistance@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@QEAAX_KU?$Sample@UDistance@datatype@herald@@@sampling@23@@Z@QEBA?A?<auto>@@AEAUDummyDistanceDelegate@@@Z Line | Count | Source | 114 | 7 | std::visit([sampled,sample](auto&& arg) { | 115 | 7 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 7 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) { | 117 | 7 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 7 | } | 119 | 7 | }, delegateV); |
??$?RAEAUDummyDistanceDelegate@@@<lambda_1>@?0???$notify@VRSSI@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@QEAAX_KU?$Sample@VRSSI@datatype@herald@@@sampling@23@@Z@QEBA?A?<auto>@@AEAUDummyDistanceDelegate@@@Z Line | Count | Source | 114 | 4 | std::visit([sampled,sample](auto&& arg) { | 115 | 4 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 4 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) {0 | 117 | 4 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 4 | } | 119 | 4 | }, delegateV); |
??$?RAEAU?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@<lambda_1>@?0???$notify@VRSSI@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@QEAAX_KU?$Sample@VRSSI@datatype@herald@@@sampling@23@@Z@QEBA?A?<auto>@@AEAU?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@23@@Z Line | Count | Source | 114 | 4 | std::visit([sampled,sample](auto&& arg) { | 115 | 4 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 4 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) {0 | 117 | 4 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 4 | } | 119 | 4 | }, delegateV); |
??$?RAEAUDummyDistanceDelegate@@@<lambda_1>@?0???$notify@UDistance@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@QEAAX_KU?$Sample@UDistance@datatype@herald@@@sampling@23@@Z@QEBA?A?<auto>@@AEAUDummyDistanceDelegate@@@Z Line | Count | Source | 114 | 1 | std::visit([sampled,sample](auto&& arg) { | 115 | 1 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 1 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) { | 117 | 1 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 1 | } | 119 | 1 | }, delegateV); |
??$?RAEAU?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@<lambda_1>@?0???$notify@UDistance@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@QEAAX_KU?$Sample@UDistance@datatype@herald@@@sampling@23@@Z@QEBA?A?<auto>@@AEAU?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@23@@Z Line | Count | Source | 114 | 1 | std::visit([sampled,sample](auto&& arg) { | 115 | 1 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 1 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) { | 117 | 1 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 1 | } | 119 | 1 | }, delegateV); |
|
120 | 41 | } |
121 | 36 | } ??$notify@VRSSI@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@QEAAX_KU?$Sample@VRSSI@datatype@herald@@@sampling@12@@Z Line | Count | Source | 112 | 24 | void notify(SampledID sampled, Sample<ValT> sample) { | 113 | 24 | for (auto& delegateV : delegates) { | 114 | 24 | std::visit([sampled,sample](auto&& arg) { | 115 | 24 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 24 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) { | 117 | 24 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 24 | } | 119 | 24 | }, delegateV); | 120 | 24 | } | 121 | 24 | } |
??$notify@UDistance@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@QEAAX_KU?$Sample@UDistance@datatype@herald@@@sampling@12@@Z Line | Count | Source | 112 | 7 | void notify(SampledID sampled, Sample<ValT> sample) { | 113 | 7 | for (auto& delegateV : delegates) { | 114 | 7 | std::visit([sampled,sample](auto&& arg) { | 115 | 7 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 7 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) { | 117 | 7 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 7 | } | 119 | 7 | }, delegateV); | 120 | 7 | } | 121 | 7 | } |
??$notify@VRSSI@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@QEAAX_KU?$Sample@VRSSI@datatype@herald@@@sampling@12@@Z Line | Count | Source | 112 | 4 | void notify(SampledID sampled, Sample<ValT> sample) { | 113 | 8 | for (auto& delegateV : delegates) { | 114 | 8 | std::visit([sampled,sample](auto&& arg) { | 115 | 8 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 8 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) { | 117 | 8 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 8 | } | 119 | 8 | }, delegateV); | 120 | 8 | } | 121 | 4 | } |
??$notify@UDistance@datatype@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@QEAAX_KU?$Sample@UDistance@datatype@herald@@@sampling@12@@Z Line | Count | Source | 112 | 1 | void notify(SampledID sampled, Sample<ValT> sample) { | 113 | 2 | for (auto& delegateV : delegates) { | 114 | 2 | std::visit([sampled,sample](auto&& arg) { | 115 | 2 | using noref = typename std::remove_reference<decltype(arg)>::type; | 116 | 2 | if constexpr (std::is_same_v<ValT,typename noref::value_type>) { | 117 | 2 | ((decltype(arg))arg).newSample(sampled,sample); // cast to call derived class function | 118 | 2 | } | 119 | 2 | }, delegateV); | 120 | 2 | } | 121 | 1 | } |
|
122 | | |
123 | | /// CAN THROW std::bad_variant_access |
124 | | template <typename DelegateT> |
125 | 6 | DelegateT& get() { |
126 | 6 | for (auto& v : delegates) { |
127 | 6 | if (auto pval = std::get_if<DelegateT>(&v)) { |
128 | 6 | return *pval; |
129 | 6 | } |
130 | 6 | } |
131 | 6 | throw std::bad_variant_access()0 ; |
132 | 6 | } ??$get@UDummyDistanceDelegate@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@QEAAAEAUDummyDistanceDelegate@@XZ Line | Count | Source | 125 | 5 | DelegateT& get() { | 126 | 5 | for (auto& v : delegates) { | 127 | 5 | if (auto pval = std::get_if<DelegateT>(&v)) { | 128 | 5 | return *pval; | 129 | 5 | } | 130 | 5 | } | 131 | 5 | throw std::bad_variant_access()0 ; | 132 | 5 | } |
??$get@UDummyDistanceDelegate@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@QEAAAEAUDummyDistanceDelegate@@XZ Line | Count | Source | 125 | 1 | DelegateT& get() { | 126 | 1 | for (auto& v : delegates) { | 127 | 1 | if (auto pval = std::get_if<DelegateT>(&v)) { | 128 | 1 | return *pval; | 129 | 1 | } | 130 | 1 | } | 131 | 1 | throw std::bad_variant_access()0 ; | 132 | 1 | } |
|
133 | | |
134 | | private: |
135 | | std::array<std::variant<DelegateTypes...>,sizeof...(DelegateTypes)> delegates; |
136 | | |
137 | | template <typename LastT> |
138 | 6 | constexpr void addDelegates(int nextPos,LastT&& last) { |
139 | 6 | delegates[nextPos] = (std::move(last)); |
140 | 6 | } ??$addDelegates@AEAUDummyDistanceDelegate@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@AEAAXHAEAUDummyDistanceDelegate@@@Z Line | Count | Source | 138 | 5 | constexpr void addDelegates(int nextPos,LastT&& last) { | 139 | 5 | delegates[nextPos] = (std::move(last)); | 140 | 5 | } |
??$addDelegates@AEAU?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@AEAAXHAEAU?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@12@@Z Line | Count | Source | 138 | 1 | constexpr void addDelegates(int nextPos,LastT&& last) { | 139 | 1 | delegates[nextPos] = (std::move(last)); | 140 | 1 | } |
|
141 | | |
142 | | template <typename FirstT, typename SecondT, typename... RestT> |
143 | 1 | constexpr void addDelegates(int nextPos,FirstT&& first, SecondT&& second, RestT&&... rest) { |
144 | 1 | delegates[nextPos] = std::move(first); |
145 | 1 | ++nextPos; |
146 | 1 | addDelegates(nextPos,second,rest...); |
147 | 1 | } |
148 | | }; |
149 | | |
150 | | /// \brief Convenience wrapper for all AnalysisProvider types used by the analysis API |
151 | | template <typename... ProviderTypes> |
152 | | struct AnalysisProviderManager { |
153 | | // Set for GCC 8/9. See https://stackoverflow.com/questions/63812165/stdvariant-requires-default-constructor-in-gcc-8-and-9-and-not-require-in-gcc |
154 | | AnalysisProviderManager() = delete; |
155 | 6 | AnalysisProviderManager(ProviderTypes... prvs) : providers() { |
156 | 6 | addProviders(0, prvs...); |
157 | 6 | } |
158 | 6 | ~AnalysisProviderManager() = default; |
159 | | |
160 | | template <typename InputValT, std::size_t SrcSz, typename SourceType, std::size_t ListSize, typename CallableForNewSample> |
161 | 17 | bool analyse(Date timeNow, SampledID sampled, SampleList<Sample<InputValT>,SrcSz>& src, ListManager<SourceType,ListSize>& lists, CallableForNewSample& callable) { |
162 | 17 | bool generated = false; |
163 | 17 | for (auto& providerV : providers) { |
164 | 17 | std::visit([&timeNow,&sampled,&src,&lists,&generated,&callable](auto&& arg) { |
165 | 17 | using noref = typename std::remove_reference<decltype(arg)>::type; |
166 | 17 | // Ensure our calee supports the types we have |
167 | 17 | if constexpr (std::is_same_v<InputValT, typename noref::input_value_type>) {0 |
168 | 17 | auto& listRef = lists.list(sampled); |
169 | 17 | generated = generated | ((decltype(arg))arg).analyse(timeNow,sampled,src,listRef,callable); |
170 | 17 | } |
171 | 17 | }, providerV); Unexecuted instantiation: ??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$analyse@VRSSI@datatype@herald@@$0BJ@V123@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@3@_KAEAU?$SampleList@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@$0BJ@VRSSI@datatype@4@@sampling@23@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@23@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@23@@Z@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z ??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$analyse@VRSSI@datatype@herald@@$0BJ@UDistance@23@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@3@_KAEAU?$SampleList@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@$0BJ@VRSSI@datatype@4@@sampling@23@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@23@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@23@@Z@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z Line | Count | Source | 164 | 15 | std::visit([&timeNow,&sampled,&src,&lists,&generated,&callable](auto&& arg) { | 165 | 15 | using noref = typename std::remove_reference<decltype(arg)>::type; | 166 | 15 | // Ensure our calee supports the types we have | 167 | 15 | if constexpr (std::is_same_v<InputValT, typename noref::input_value_type>) { | 168 | 15 | auto& listRef = lists.list(sampled); | 169 | 15 | generated = generated | ((decltype(arg))arg).analyse(timeNow,sampled,src,listRef,callable); | 170 | 15 | } | 171 | 15 | }, providerV); |
Unexecuted instantiation: ??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$analyse@UDistance@datatype@herald@@$0BJ@VRSSI@23@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@3@_KAEAU?$SampleList@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@$0BJ@UDistance@datatype@4@@sampling@23@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@23@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@23@@Z@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z Unexecuted instantiation: ??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$analyse@UDistance@datatype@herald@@$0BJ@U123@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@3@_KAEAU?$SampleList@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@$0BJ@UDistance@datatype@4@@sampling@23@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@23@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@23@@Z@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z Unexecuted instantiation: ??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$analyse@VRSSI@datatype@herald@@$0BJ@V123@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@3@_KAEAU?$SampleList@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@$0BJ@VRSSI@datatype@4@@sampling@23@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@23@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@23@@Z@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z ??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$analyse@VRSSI@datatype@herald@@$0BJ@UDistance@23@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@3@_KAEAU?$SampleList@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@$0BJ@VRSSI@datatype@4@@sampling@23@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@23@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@23@@Z@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z Line | Count | Source | 164 | 2 | std::visit([&timeNow,&sampled,&src,&lists,&generated,&callable](auto&& arg) { | 165 | 2 | using noref = typename std::remove_reference<decltype(arg)>::type; | 166 | 2 | // Ensure our calee supports the types we have | 167 | 2 | if constexpr (std::is_same_v<InputValT, typename noref::input_value_type>) { | 168 | 2 | auto& listRef = lists.list(sampled); | 169 | 2 | generated = generated | ((decltype(arg))arg).analyse(timeNow,sampled,src,listRef,callable); | 170 | 2 | } | 171 | 2 | }, providerV); |
Unexecuted instantiation: ??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$analyse@UDistance@datatype@herald@@$0BJ@VRSSI@23@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@3@_KAEAU?$SampleList@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@$0BJ@UDistance@datatype@4@@sampling@23@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@23@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@23@@Z@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z Unexecuted instantiation: ??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$analyse@UDistance@datatype@herald@@$0BJ@U123@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@3@_KAEAU?$SampleList@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@$0BJ@UDistance@datatype@4@@sampling@23@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@23@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@23@@Z@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z |
172 | 17 | } |
173 | 17 | return generated; |
174 | 17 | } Unexecuted instantiation: ??$analyse@VRSSI@datatype@herald@@$0BJ@V123@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@2@_KAEAU?$SampleList@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@$0BJ@VRSSI@datatype@4@@sampling@12@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@12@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@12@@Z ??$analyse@VRSSI@datatype@herald@@$0BJ@UDistance@23@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@2@_KAEAU?$SampleList@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@$0BJ@VRSSI@datatype@4@@sampling@12@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@12@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@12@@Z Line | Count | Source | 161 | 15 | bool analyse(Date timeNow, SampledID sampled, SampleList<Sample<InputValT>,SrcSz>& src, ListManager<SourceType,ListSize>& lists, CallableForNewSample& callable) { | 162 | 15 | bool generated = false; | 163 | 15 | for (auto& providerV : providers) { | 164 | 15 | std::visit([&timeNow,&sampled,&src,&lists,&generated,&callable](auto&& arg) { | 165 | 15 | using noref = typename std::remove_reference<decltype(arg)>::type; | 166 | 15 | // Ensure our calee supports the types we have | 167 | 15 | if constexpr (std::is_same_v<InputValT, typename noref::input_value_type>) { | 168 | 15 | auto& listRef = lists.list(sampled); | 169 | 15 | generated = generated | ((decltype(arg))arg).analyse(timeNow,sampled,src,listRef,callable); | 170 | 15 | } | 171 | 15 | }, providerV); | 172 | 15 | } | 173 | 15 | return generated; | 174 | 15 | } |
Unexecuted instantiation: ??$analyse@UDistance@datatype@herald@@$0BJ@VRSSI@23@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@2@_KAEAU?$SampleList@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@$0BJ@UDistance@datatype@4@@sampling@12@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@12@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@12@@Z Unexecuted instantiation: ??$analyse@UDistance@datatype@herald@@$0BJ@U123@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@2@_KAEAU?$SampleList@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@$0BJ@UDistance@datatype@4@@sampling@12@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@12@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@12@@Z Unexecuted instantiation: ??$analyse@VRSSI@datatype@herald@@$0BJ@V123@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@2@_KAEAU?$SampleList@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@$0BJ@VRSSI@datatype@4@@sampling@12@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@12@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@12@@Z ??$analyse@VRSSI@datatype@herald@@$0BJ@UDistance@23@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@2@_KAEAU?$SampleList@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@$0BJ@VRSSI@datatype@4@@sampling@12@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@12@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@12@@Z Line | Count | Source | 161 | 2 | bool analyse(Date timeNow, SampledID sampled, SampleList<Sample<InputValT>,SrcSz>& src, ListManager<SourceType,ListSize>& lists, CallableForNewSample& callable) { | 162 | 2 | bool generated = false; | 163 | 2 | for (auto& providerV : providers) { | 164 | 2 | std::visit([&timeNow,&sampled,&src,&lists,&generated,&callable](auto&& arg) { | 165 | 2 | using noref = typename std::remove_reference<decltype(arg)>::type; | 166 | 2 | // Ensure our calee supports the types we have | 167 | 2 | if constexpr (std::is_same_v<InputValT, typename noref::input_value_type>) { | 168 | 2 | auto& listRef = lists.list(sampled); | 169 | 2 | generated = generated | ((decltype(arg))arg).analyse(timeNow,sampled,src,listRef,callable); | 170 | 2 | } | 171 | 2 | }, providerV); | 172 | 2 | } | 173 | 2 | return generated; | 174 | 2 | } |
Unexecuted instantiation: ??$analyse@UDistance@datatype@herald@@$0BJ@VRSSI@23@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@2@_KAEAU?$SampleList@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@$0BJ@UDistance@datatype@4@@sampling@12@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@12@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@12@@Z Unexecuted instantiation: ??$analyse@UDistance@datatype@herald@@$0BJ@U123@$0BJ@U?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@3@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NVDate@datatype@2@_KAEAU?$SampleList@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@$0BJ@UDistance@datatype@4@@sampling@12@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@12@AEAU?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@12@@Z |
175 | | |
176 | | /// CAN THROW std::bad_variant_access |
177 | | template <typename ProviderT> |
178 | | ProviderT& get() { |
179 | | for (auto& v : providers) { |
180 | | if (auto pval = std::get_if<ProviderT>(&v)) { |
181 | | return *pval; |
182 | | } |
183 | | } |
184 | | throw std::bad_variant_access(); |
185 | | } |
186 | | |
187 | | template <typename InputT,typename OutputT> |
188 | 68 | constexpr bool hasMatchingAnalyser() noexcept { |
189 | 68 | bool match = false; |
190 | 68 | for (auto& providerV : providers) { |
191 | 68 | std::visit([&match] (auto&& provider) { |
192 | 68 | using InputValT = typename InputT::value_type; |
193 | 68 | using InT = typename std::remove_reference_t<decltype(provider)>::input_value_type; |
194 | 68 | using OutT = typename std::remove_reference_t<decltype(provider)>::output_value_type; |
195 | 68 | // std::cout << " Provider being checked " << typeid(provider).name() << std::endl; |
196 | 68 | // InT inInstance; |
197 | 68 | // OutT outInstance; |
198 | 68 | // std::cout << " In type " << typeid(inInstance).name() << ", out type " << typeid(outInstance).name() << std::endl; |
199 | 68 | // InputValT inputInstance; |
200 | 68 | // OutputT outputInstance; |
201 | 68 | // std::cout << " Input type " << typeid(inputInstance).name() << ", output type " << typeid(outputInstance).name() << std::endl; |
202 | 68 | if constexpr (std::is_same_v<InputValT,InT> && std::is_same_v<OutputT,OutT>0 ) {0 |
203 | 17 | match = true; |
204 | 17 | // std::cout << " MATCHED!" << std::endl; |
205 | 17 | } |
206 | 68 | }, providerV); ??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$hasMatchingAnalyser@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@VRSSI@datatype@4@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NXZ@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z Line | Count | Source | 191 | 17 | std::visit([&match] (auto&& provider) { | 192 | 17 | using InputValT = typename InputT::value_type; | 193 | 17 | using InT = typename std::remove_reference_t<decltype(provider)>::input_value_type; | 194 | 17 | using OutT = typename std::remove_reference_t<decltype(provider)>::output_value_type; | 195 | 17 | // std::cout << " Provider being checked " << typeid(provider).name() << std::endl; | 196 | 17 | // InT inInstance; | 197 | 17 | // OutT outInstance; | 198 | 17 | // std::cout << " In type " << typeid(inInstance).name() << ", out type " << typeid(outInstance).name() << std::endl; | 199 | 17 | // InputValT inputInstance; | 200 | 17 | // OutputT outputInstance; | 201 | 17 | // std::cout << " Input type " << typeid(inputInstance).name() << ", output type " << typeid(outputInstance).name() << std::endl; | 202 | 17 | if constexpr (std::is_same_v<InputValT,InT> && std::is_same_v<OutputT,OutT>0 ) {0 | 203 | 17 | match = true; | 204 | 17 | // std::cout << " MATCHED!" << std::endl; | 205 | 17 | } | 206 | 17 | }, providerV); |
??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$hasMatchingAnalyser@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@UDistance@datatype@4@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NXZ@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z Line | Count | Source | 191 | 17 | std::visit([&match] (auto&& provider) { | 192 | 17 | using InputValT = typename InputT::value_type; | 193 | 17 | using InT = typename std::remove_reference_t<decltype(provider)>::input_value_type; | 194 | 17 | using OutT = typename std::remove_reference_t<decltype(provider)>::output_value_type; | 195 | 17 | // std::cout << " Provider being checked " << typeid(provider).name() << std::endl; | 196 | 17 | // InT inInstance; | 197 | 17 | // OutT outInstance; | 198 | 17 | // std::cout << " In type " << typeid(inInstance).name() << ", out type " << typeid(outInstance).name() << std::endl; | 199 | 17 | // InputValT inputInstance; | 200 | 17 | // OutputT outputInstance; | 201 | 17 | // std::cout << " Input type " << typeid(inputInstance).name() << ", output type " << typeid(outputInstance).name() << std::endl; | 202 | 17 | if constexpr (std::is_same_v<InputValT,InT> && std::is_same_v<OutputT,OutT>0 ) { | 203 | 17 | match = true; | 204 | 17 | // std::cout << " MATCHED!" << std::endl; | 205 | 17 | } | 206 | 17 | }, providerV); |
??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$hasMatchingAnalyser@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@VRSSI@datatype@4@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NXZ@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z Line | Count | Source | 191 | 17 | std::visit([&match] (auto&& provider) { | 192 | 17 | using InputValT = typename InputT::value_type; | 193 | 17 | using InT = typename std::remove_reference_t<decltype(provider)>::input_value_type; | 194 | 17 | using OutT = typename std::remove_reference_t<decltype(provider)>::output_value_type; | 195 | 17 | // std::cout << " Provider being checked " << typeid(provider).name() << std::endl; | 196 | 17 | // InT inInstance; | 197 | 17 | // OutT outInstance; | 198 | 17 | // std::cout << " In type " << typeid(inInstance).name() << ", out type " << typeid(outInstance).name() << std::endl; | 199 | 17 | // InputValT inputInstance; | 200 | 17 | // OutputT outputInstance; | 201 | 17 | // std::cout << " Input type " << typeid(inputInstance).name() << ", output type " << typeid(outputInstance).name() << std::endl; | 202 | 17 | if constexpr (std::is_same_v<InputValT,InT> && std::is_same_v<OutputT,OutT>0 ) {0 | 203 | 17 | match = true; | 204 | 17 | // std::cout << " MATCHED!" << std::endl; | 205 | 17 | } | 206 | 17 | }, providerV); |
??$?RAEAUFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@<lambda_1>@?0???$hasMatchingAnalyser@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@UDistance@datatype@4@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NXZ@QEBA?A?<auto>@@AEAUFowlerBasicAnalyser@distance@algorithms@23@@Z Line | Count | Source | 191 | 17 | std::visit([&match] (auto&& provider) { | 192 | 17 | using InputValT = typename InputT::value_type; | 193 | 17 | using InT = typename std::remove_reference_t<decltype(provider)>::input_value_type; | 194 | 17 | using OutT = typename std::remove_reference_t<decltype(provider)>::output_value_type; | 195 | 17 | // std::cout << " Provider being checked " << typeid(provider).name() << std::endl; | 196 | 17 | // InT inInstance; | 197 | 17 | // OutT outInstance; | 198 | 17 | // std::cout << " In type " << typeid(inInstance).name() << ", out type " << typeid(outInstance).name() << std::endl; | 199 | 17 | // InputValT inputInstance; | 200 | 17 | // OutputT outputInstance; | 201 | 17 | // std::cout << " Input type " << typeid(inputInstance).name() << ", output type " << typeid(outputInstance).name() << std::endl; | 202 | 17 | if constexpr (std::is_same_v<InputValT,InT> && std::is_same_v<OutputT,OutT>0 ) {0 | 203 | 17 | match = true; | 204 | 17 | // std::cout << " MATCHED!" << std::endl; | 205 | 17 | } | 206 | 17 | }, providerV); |
|
207 | 68 | } |
208 | 68 | return match; |
209 | 68 | } ??$hasMatchingAnalyser@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@VRSSI@datatype@4@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NXZ Line | Count | Source | 188 | 17 | constexpr bool hasMatchingAnalyser() noexcept { | 189 | 17 | bool match = false; | 190 | 17 | for (auto& providerV : providers) { | 191 | 17 | std::visit([&match] (auto&& provider) { | 192 | 17 | using InputValT = typename InputT::value_type; | 193 | 17 | using InT = typename std::remove_reference_t<decltype(provider)>::input_value_type; | 194 | 17 | using OutT = typename std::remove_reference_t<decltype(provider)>::output_value_type; | 195 | 17 | // std::cout << " Provider being checked " << typeid(provider).name() << std::endl; | 196 | 17 | // InT inInstance; | 197 | 17 | // OutT outInstance; | 198 | 17 | // std::cout << " In type " << typeid(inInstance).name() << ", out type " << typeid(outInstance).name() << std::endl; | 199 | 17 | // InputValT inputInstance; | 200 | 17 | // OutputT outputInstance; | 201 | 17 | // std::cout << " Input type " << typeid(inputInstance).name() << ", output type " << typeid(outputInstance).name() << std::endl; | 202 | 17 | if constexpr (std::is_same_v<InputValT,InT> && std::is_same_v<OutputT,OutT>) { | 203 | 17 | match = true; | 204 | 17 | // std::cout << " MATCHED!" << std::endl; | 205 | 17 | } | 206 | 17 | }, providerV); | 207 | 17 | } | 208 | 17 | return match; | 209 | 17 | } |
??$hasMatchingAnalyser@U?$Sample@VRSSI@datatype@herald@@@sampling@analysis@herald@@UDistance@datatype@4@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NXZ Line | Count | Source | 188 | 17 | constexpr bool hasMatchingAnalyser() noexcept { | 189 | 17 | bool match = false; | 190 | 17 | for (auto& providerV : providers) { | 191 | 17 | std::visit([&match] (auto&& provider) { | 192 | 17 | using InputValT = typename InputT::value_type; | 193 | 17 | using InT = typename std::remove_reference_t<decltype(provider)>::input_value_type; | 194 | 17 | using OutT = typename std::remove_reference_t<decltype(provider)>::output_value_type; | 195 | 17 | // std::cout << " Provider being checked " << typeid(provider).name() << std::endl; | 196 | 17 | // InT inInstance; | 197 | 17 | // OutT outInstance; | 198 | 17 | // std::cout << " In type " << typeid(inInstance).name() << ", out type " << typeid(outInstance).name() << std::endl; | 199 | 17 | // InputValT inputInstance; | 200 | 17 | // OutputT outputInstance; | 201 | 17 | // std::cout << " Input type " << typeid(inputInstance).name() << ", output type " << typeid(outputInstance).name() << std::endl; | 202 | 17 | if constexpr (std::is_same_v<InputValT,InT> && std::is_same_v<OutputT,OutT>) { | 203 | 17 | match = true; | 204 | 17 | // std::cout << " MATCHED!" << std::endl; | 205 | 17 | } | 206 | 17 | }, providerV); | 207 | 17 | } | 208 | 17 | return match; | 209 | 17 | } |
??$hasMatchingAnalyser@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@VRSSI@datatype@4@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NXZ Line | Count | Source | 188 | 17 | constexpr bool hasMatchingAnalyser() noexcept { | 189 | 17 | bool match = false; | 190 | 17 | for (auto& providerV : providers) { | 191 | 17 | std::visit([&match] (auto&& provider) { | 192 | 17 | using InputValT = typename InputT::value_type; | 193 | 17 | using InT = typename std::remove_reference_t<decltype(provider)>::input_value_type; | 194 | 17 | using OutT = typename std::remove_reference_t<decltype(provider)>::output_value_type; | 195 | 17 | // std::cout << " Provider being checked " << typeid(provider).name() << std::endl; | 196 | 17 | // InT inInstance; | 197 | 17 | // OutT outInstance; | 198 | 17 | // std::cout << " In type " << typeid(inInstance).name() << ", out type " << typeid(outInstance).name() << std::endl; | 199 | 17 | // InputValT inputInstance; | 200 | 17 | // OutputT outputInstance; | 201 | 17 | // std::cout << " Input type " << typeid(inputInstance).name() << ", output type " << typeid(outputInstance).name() << std::endl; | 202 | 17 | if constexpr (std::is_same_v<InputValT,InT> && std::is_same_v<OutputT,OutT>) { | 203 | 17 | match = true; | 204 | 17 | // std::cout << " MATCHED!" << std::endl; | 205 | 17 | } | 206 | 17 | }, providerV); | 207 | 17 | } | 208 | 17 | return match; | 209 | 17 | } |
??$hasMatchingAnalyser@U?$Sample@UDistance@datatype@herald@@@sampling@analysis@herald@@UDistance@datatype@4@@?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@analysis@herald@@QEAA_NXZ Line | Count | Source | 188 | 17 | constexpr bool hasMatchingAnalyser() noexcept { | 189 | 17 | bool match = false; | 190 | 17 | for (auto& providerV : providers) { | 191 | 17 | std::visit([&match] (auto&& provider) { | 192 | 17 | using InputValT = typename InputT::value_type; | 193 | 17 | using InT = typename std::remove_reference_t<decltype(provider)>::input_value_type; | 194 | 17 | using OutT = typename std::remove_reference_t<decltype(provider)>::output_value_type; | 195 | 17 | // std::cout << " Provider being checked " << typeid(provider).name() << std::endl; | 196 | 17 | // InT inInstance; | 197 | 17 | // OutT outInstance; | 198 | 17 | // std::cout << " In type " << typeid(inInstance).name() << ", out type " << typeid(outInstance).name() << std::endl; | 199 | 17 | // InputValT inputInstance; | 200 | 17 | // OutputT outputInstance; | 201 | 17 | // std::cout << " Input type " << typeid(inputInstance).name() << ", output type " << typeid(outputInstance).name() << std::endl; | 202 | 17 | if constexpr (std::is_same_v<InputValT,InT> && std::is_same_v<OutputT,OutT>) { | 203 | 17 | match = true; | 204 | 17 | // std::cout << " MATCHED!" << std::endl; | 205 | 17 | } | 206 | 17 | }, providerV); | 207 | 17 | } | 208 | 17 | return match; | 209 | 17 | } |
|
210 | | |
211 | | private: |
212 | | std::array<std::variant<ProviderTypes...>,sizeof...(ProviderTypes)> providers; |
213 | | |
214 | | template <typename LastT> |
215 | 6 | constexpr void addProviders(int nextPos, LastT&& last) { |
216 | 6 | providers[nextPos] = std::move(last); |
217 | 6 | } |
218 | | |
219 | | template <typename FirstT, typename SecondT, typename... RestT> |
220 | | constexpr void addProviders(int nextPos, FirstT&& first, SecondT&& second, RestT&&... rest) { |
221 | | providers[nextPos] = std::move(first); |
222 | | ++nextPos; |
223 | | addProviders(nextPos,second,rest...); |
224 | | } |
225 | | }; |
226 | | |
227 | | /// \brief Manages all sample lists, sources, sinks, and analysis instances for all data generated within a system |
228 | | /// |
229 | | /// This class can be used 'live' against real sensors, or statically with reference data. |
230 | | /// This is achieved by ensuring the run(Date) method takes in the Date for the time of evaluation rather |
231 | | /// than using the current Date. |
232 | | template <typename AnalysisDelegateManagerT, typename AnalysisProviderManagerT, typename... SourceTypes> // TODO derive SourceTypes from providers and delegates // TODO parameterise type lengths somehow (traits template?) |
233 | | struct AnalysisRunner { |
234 | | static constexpr std::size_t ListSize = 25; // TODO make this external somehow for each type (trait?) |
235 | | // using valueTypes = (typename SourceTypes::value_type)...; |
236 | | |
237 | 6 | AnalysisRunner(AnalysisDelegateManagerT& adm, AnalysisProviderManagerT& provds) : lists(), delegates(adm), runners(provds) /*, hasNewData(false)*/ {} ??0?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAA@AEAU?$AnalysisDelegateManager@UDummyDistanceDelegate@@@12@AEAU?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@12@@Z Line | Count | Source | 237 | 5 | AnalysisRunner(AnalysisDelegateManagerT& adm, AnalysisProviderManagerT& provds) : lists(), delegates(adm), runners(provds) /*, hasNewData(false)*/ {} |
??0?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAA@AEAU?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@12@AEAU?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@12@@Z Line | Count | Source | 237 | 1 | AnalysisRunner(AnalysisDelegateManagerT& adm, AnalysisProviderManagerT& provds) : lists(), delegates(adm), runners(provds) /*, hasNewData(false)*/ {} |
|
238 | 6 | ~AnalysisRunner() = default; ??1?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAA@XZ Line | Count | Source | 238 | 5 | ~AnalysisRunner() = default; |
??1?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAA@XZ Line | Count | Source | 238 | 1 | ~AnalysisRunner() = default; |
|
239 | | |
240 | | /// We are an analysis delegate ourselves - this is used by Source types, and by producers (analysis runners) |
241 | | template <typename ValT> |
242 | 36 | void newSample(SampledID sampled, sampling::Sample<ValT> sample) { |
243 | 36 | // incoming sample. Pass to correct list |
244 | 36 | lists.template get<ListManager<ValT,ListSize>>().list(sampled).push(sample); // TODO get ListSize dynamically |
245 | 36 | // inform delegates |
246 | 36 | delegates.notify(sampled,sample); |
247 | 36 | } ??$newSample@VRSSI@datatype@herald@@@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAX_KU?$Sample@VRSSI@datatype@herald@@@sampling@12@@Z Line | Count | Source | 242 | 24 | void newSample(SampledID sampled, sampling::Sample<ValT> sample) { | 243 | 24 | // incoming sample. Pass to correct list | 244 | 24 | lists.template get<ListManager<ValT,ListSize>>().list(sampled).push(sample); // TODO get ListSize dynamically | 245 | 24 | // inform delegates | 246 | 24 | delegates.notify(sampled,sample); | 247 | 24 | } |
??$newSample@UDistance@datatype@herald@@@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAX_KU?$Sample@UDistance@datatype@herald@@@sampling@12@@Z Line | Count | Source | 242 | 7 | void newSample(SampledID sampled, sampling::Sample<ValT> sample) { | 243 | 7 | // incoming sample. Pass to correct list | 244 | 7 | lists.template get<ListManager<ValT,ListSize>>().list(sampled).push(sample); // TODO get ListSize dynamically | 245 | 7 | // inform delegates | 246 | 7 | delegates.notify(sampled,sample); | 247 | 7 | } |
??$newSample@VRSSI@datatype@herald@@@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAX_KU?$Sample@VRSSI@datatype@herald@@@sampling@12@@Z Line | Count | Source | 242 | 4 | void newSample(SampledID sampled, sampling::Sample<ValT> sample) { | 243 | 4 | // incoming sample. Pass to correct list | 244 | 4 | lists.template get<ListManager<ValT,ListSize>>().list(sampled).push(sample); // TODO get ListSize dynamically | 245 | 4 | // inform delegates | 246 | 4 | delegates.notify(sampled,sample); | 247 | 4 | } |
??$newSample@UDistance@datatype@herald@@@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAX_KU?$Sample@UDistance@datatype@herald@@@sampling@12@@Z Line | Count | Source | 242 | 1 | void newSample(SampledID sampled, sampling::Sample<ValT> sample) { | 243 | 1 | // incoming sample. Pass to correct list | 244 | 1 | lists.template get<ListManager<ValT,ListSize>>().list(sampled).push(sample); // TODO get ListSize dynamically | 245 | 1 | // inform delegates | 246 | 1 | delegates.notify(sampled,sample); | 247 | 1 | } |
|
248 | | |
249 | | template <typename ValT> |
250 | 8 | void operator()(SampledID sampled,sampling::Sample<ValT> sample) { |
251 | 8 | newSample(sampled,sample); |
252 | 8 | } ??$?RUDistance@datatype@herald@@@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAX_KU?$Sample@UDistance@datatype@herald@@@sampling@12@@Z Line | Count | Source | 250 | 7 | void operator()(SampledID sampled,sampling::Sample<ValT> sample) { | 251 | 7 | newSample(sampled,sample); | 252 | 7 | } |
??$?RUDistance@datatype@herald@@@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAX_KU?$Sample@UDistance@datatype@herald@@@sampling@12@@Z Line | Count | Source | 250 | 1 | void operator()(SampledID sampled,sampling::Sample<ValT> sample) { | 251 | 1 | newSample(sampled,sample); | 252 | 1 | } |
|
253 | | |
254 | | /// Run the relevant analyses given the current time point |
255 | 18 | void run(Date timeNow) { |
256 | 18 | // call analyse(dateNow,srcList,dstDelegate) for all delegates with the correct list each, for each sampled |
257 | 18 | |
258 | 18 | // DO NOT USE Performance enhancement - 'dirty' sample lists only (ones with new data) |
259 | 18 | // The reason this is commented out is because for some analysers producing a new value based on no new data may be valid. |
260 | 18 | // if (!hasNewData) { |
261 | 18 | // // This also prevents 'new' conversions even if no new data has arrived, skewing analysis results |
262 | 18 | // return; |
263 | 18 | // } |
264 | 36 | for (auto& listManager : lists) { // For each input list |
265 | 36 | std::visit([timeNow,this] (auto&& arg) { // Visit each of our list managers (that may be used as an output list) |
266 | 36 | for (auto& mgrPair : arg) { // For each output list instance // arg = ListManager<SampleList<InputValueT>,SrcSz> |
267 | 34 | // Derived Input type and size from 'list' input list |
268 | 34 | |
269 | 34 | auto& sampled = mgrPair.first; |
270 | 34 | auto& list = mgrPair.second; |
271 | 34 | |
272 | 68 | for (auto& outputListManagerV : lists) { |
273 | 68 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) |
274 | 68 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; |
275 | 68 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; |
276 | 68 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; |
277 | 68 | |
278 | 68 | // Check for presence of an analyser that converts from InputValT to LMValT |
279 | 68 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { |
280 | 17 | // std::cout << "Found matching analyser!" << std::endl; |
281 | 17 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> |
282 | 17 | } |
283 | 68 | }, outputListManagerV); ??$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0???$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@0?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@34@@Z@QEBA?A?7@1@Z Line | Count | Source | 273 | 15 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 15 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 15 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 15 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 15 | | 278 | 15 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 15 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 0 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 0 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 0 | } | 283 | 15 | }, outputListManagerV); |
??$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0???$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@0?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@34@@Z@QEBA?A?7@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@34@@Z Line | Count | Source | 273 | 15 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 15 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 15 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 15 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 15 | | 278 | 15 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 15 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 15 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 15 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 15 | } | 283 | 15 | }, outputListManagerV); |
??$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0???$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@0?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@34@@Z@QEBA?A?7@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@34@@Z Line | Count | Source | 273 | 15 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 15 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 15 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 15 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 15 | | 278 | 15 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 15 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 0 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 0 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 0 | } | 283 | 15 | }, outputListManagerV); |
??$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0???$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@0?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@34@@Z@QEBA?A?7@1@Z Line | Count | Source | 273 | 15 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 15 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 15 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 15 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 15 | | 278 | 15 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 15 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 0 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 0 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 0 | } | 283 | 15 | }, outputListManagerV); |
??$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0???$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@0?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@34@@Z@QEBA?A?7@1@Z Line | Count | Source | 273 | 2 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 2 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 2 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 2 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 2 | | 278 | 2 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 2 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 0 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 0 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 0 | } | 283 | 2 | }, outputListManagerV); |
??$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0???$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@0?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@34@@Z@QEBA?A?7@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@34@@Z Line | Count | Source | 273 | 2 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 2 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 2 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 2 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 2 | | 278 | 2 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 2 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 2 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 2 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 2 | } | 283 | 2 | }, outputListManagerV); |
??$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0???$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@0?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@34@@Z@QEBA?A?7@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@34@@Z Line | Count | Source | 273 | 2 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 2 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 2 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 2 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 2 | | 278 | 2 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 2 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 0 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 0 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 0 | } | 283 | 2 | }, outputListManagerV); |
??$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0???$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@0?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@34@@Z@QEBA?A?7@1@Z Line | Count | Source | 273 | 2 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 2 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 2 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 2 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 2 | | 278 | 2 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 2 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 0 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 0 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 0 | } | 283 | 2 | }, outputListManagerV); |
|
284 | 68 | } |
285 | 34 | } |
286 | 36 | }, listManager); ??$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@34@@Z Line | Count | Source | 265 | 16 | std::visit([timeNow,this] (auto&& arg) { // Visit each of our list managers (that may be used as an output list) | 266 | 16 | for (auto& mgrPair : arg) { // For each output list instance // arg = ListManager<SampleList<InputValueT>,SrcSz> | 267 | 15 | // Derived Input type and size from 'list' input list | 268 | 15 | | 269 | 15 | auto& sampled = mgrPair.first; | 270 | 15 | auto& list = mgrPair.second; | 271 | 15 | | 272 | 30 | for (auto& outputListManagerV : lists) { | 273 | 30 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 30 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 30 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 30 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 30 | | 278 | 30 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 30 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 30 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 30 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 30 | } | 283 | 30 | }, outputListManagerV); | 284 | 30 | } | 285 | 15 | } | 286 | 16 | }, listManager); |
??$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@34@@Z Line | Count | Source | 265 | 16 | std::visit([timeNow,this] (auto&& arg) { // Visit each of our list managers (that may be used as an output list) | 266 | 16 | for (auto& mgrPair : arg) { // For each output list instance // arg = ListManager<SampleList<InputValueT>,SrcSz> | 267 | 15 | // Derived Input type and size from 'list' input list | 268 | 15 | | 269 | 15 | auto& sampled = mgrPair.first; | 270 | 15 | auto& list = mgrPair.second; | 271 | 15 | | 272 | 30 | for (auto& outputListManagerV : lists) { | 273 | 30 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 30 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 30 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 30 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 30 | | 278 | 30 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 30 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 30 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 30 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 30 | } | 283 | 30 | }, outputListManagerV); | 284 | 30 | } | 285 | 15 | } | 286 | 16 | }, listManager); |
??$?RAEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@VRSSI@datatype@herald@@$0BJ@@34@@Z Line | Count | Source | 265 | 2 | std::visit([timeNow,this] (auto&& arg) { // Visit each of our list managers (that may be used as an output list) | 266 | 2 | for (auto& mgrPair : arg) { // For each output list instance // arg = ListManager<SampleList<InputValueT>,SrcSz> | 267 | 2 | // Derived Input type and size from 'list' input list | 268 | 2 | | 269 | 2 | auto& sampled = mgrPair.first; | 270 | 2 | auto& list = mgrPair.second; | 271 | 2 | | 272 | 4 | for (auto& outputListManagerV : lists) { | 273 | 4 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 4 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 4 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 4 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 4 | | 278 | 4 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 4 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 4 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 4 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 4 | } | 283 | 4 | }, outputListManagerV); | 284 | 4 | } | 285 | 2 | } | 286 | 2 | }, listManager); |
??$?RAEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@analysis@herald@@@<lambda_1>@?0??run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@4@@Z@QEBA?A?<auto>@@AEAU?$ListManager@UDistance@datatype@herald@@$0BJ@@34@@Z Line | Count | Source | 265 | 2 | std::visit([timeNow,this] (auto&& arg) { // Visit each of our list managers (that may be used as an output list) | 266 | 2 | for (auto& mgrPair : arg) { // For each output list instance // arg = ListManager<SampleList<InputValueT>,SrcSz> | 267 | 2 | // Derived Input type and size from 'list' input list | 268 | 2 | | 269 | 2 | auto& sampled = mgrPair.first; | 270 | 2 | auto& list = mgrPair.second; | 271 | 2 | | 272 | 4 | for (auto& outputListManagerV : lists) { | 273 | 4 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 4 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 4 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 4 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 4 | | 278 | 4 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 4 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 4 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 4 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 4 | } | 283 | 4 | }, outputListManagerV); | 284 | 4 | } | 285 | 2 | } | 286 | 2 | }, listManager); |
|
287 | 36 | } |
288 | 18 | // hasNewData = false; |
289 | 18 | } ?run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@3@@Z Line | Count | Source | 255 | 16 | void run(Date timeNow) { | 256 | 16 | // call analyse(dateNow,srcList,dstDelegate) for all delegates with the correct list each, for each sampled | 257 | 16 | | 258 | 16 | // DO NOT USE Performance enhancement - 'dirty' sample lists only (ones with new data) | 259 | 16 | // The reason this is commented out is because for some analysers producing a new value based on no new data may be valid. | 260 | 16 | // if (!hasNewData) { | 261 | 16 | // // This also prevents 'new' conversions even if no new data has arrived, skewing analysis results | 262 | 16 | // return; | 263 | 16 | // } | 264 | 32 | for (auto& listManager : lists) { // For each input list | 265 | 32 | std::visit([timeNow,this] (auto&& arg) { // Visit each of our list managers (that may be used as an output list) | 266 | 32 | for (auto& mgrPair : arg) { // For each output list instance // arg = ListManager<SampleList<InputValueT>,SrcSz> | 267 | 32 | // Derived Input type and size from 'list' input list | 268 | 32 | | 269 | 32 | auto& sampled = mgrPair.first; | 270 | 32 | auto& list = mgrPair.second; | 271 | 32 | | 272 | 32 | for (auto& outputListManagerV : lists) { | 273 | 32 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 32 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 32 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 32 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 32 | | 278 | 32 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 32 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 32 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 32 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 32 | } | 283 | 32 | }, outputListManagerV); | 284 | 32 | } | 285 | 32 | } | 286 | 32 | }, listManager); | 287 | 32 | } | 288 | 16 | // hasNewData = false; | 289 | 16 | } |
?run@?$AnalysisRunner@U?$AnalysisDelegateManager@UDummyDistanceDelegate@@U?$LoggingAnalysisDelegate@U?$Context@UDefaultPlatformType@herald@@UDummyLoggingSink@@VDummyBluetoothStateManager@@@herald@@UDistance@datatype@2@@analysis@herald@@@analysis@herald@@U?$AnalysisProviderManager@UFowlerBasicAnalyser@distance@algorithms@analysis@herald@@@23@VRSSI@datatype@3@UDistance@63@@analysis@herald@@QEAAXVDate@datatype@3@@Z Line | Count | Source | 255 | 2 | void run(Date timeNow) { | 256 | 2 | // call analyse(dateNow,srcList,dstDelegate) for all delegates with the correct list each, for each sampled | 257 | 2 | | 258 | 2 | // DO NOT USE Performance enhancement - 'dirty' sample lists only (ones with new data) | 259 | 2 | // The reason this is commented out is because for some analysers producing a new value based on no new data may be valid. | 260 | 2 | // if (!hasNewData) { | 261 | 2 | // // This also prevents 'new' conversions even if no new data has arrived, skewing analysis results | 262 | 2 | // return; | 263 | 2 | // } | 264 | 4 | for (auto& listManager : lists) { // For each input list | 265 | 4 | std::visit([timeNow,this] (auto&& arg) { // Visit each of our list managers (that may be used as an output list) | 266 | 4 | for (auto& mgrPair : arg) { // For each output list instance // arg = ListManager<SampleList<InputValueT>,SrcSz> | 267 | 4 | // Derived Input type and size from 'list' input list | 268 | 4 | | 269 | 4 | auto& sampled = mgrPair.first; | 270 | 4 | auto& list = mgrPair.second; | 271 | 4 | | 272 | 4 | for (auto& outputListManagerV : lists) { | 273 | 4 | std::visit([timeNow, &list, &sampled, this] (auto&& outputListManager) { // Visit each of our list managers (that may be used as an output list) | 274 | 4 | using InputValT = typename std::remove_reference_t<decltype(list)>::value_type; | 275 | 4 | using LMValT = typename std::remove_reference_t<decltype(outputListManager)>::value_type; | 276 | 4 | // std::cout << "Trying to call analysers for source type " << typeid(list).name() << " to output type " << typeid(outputListManager).name() << std::endl; | 277 | 4 | | 278 | 4 | // Check for presence of an analyser that converts from InputValT to LMValT | 279 | 4 | if (runners.template hasMatchingAnalyser<InputValT,LMValT>()) { | 280 | 4 | // std::cout << "Found matching analyser!" << std::endl; | 281 | 4 | /*bool newDataGenerated =*/ runners.template analyse(timeNow,sampled,list,outputListManager, *this); // <InputValT,InputSz,LMValT,LMSz> | 282 | 4 | } | 283 | 4 | }, outputListManagerV); | 284 | 4 | } | 285 | 4 | } | 286 | 4 | }, listManager); | 287 | 4 | } | 288 | 2 | // hasNewData = false; | 289 | 2 | } |
|
290 | | |
291 | | private: |
292 | | // TODO make sizes a parameterised list derived from template parameters |
293 | | VariantSet<ListManager<SourceTypes,ListSize>...> lists; // exactly one list manager per value type |
294 | | AnalysisDelegateManagerT& delegates; |
295 | | AnalysisProviderManagerT& runners; |
296 | | // bool hasNewData; |
297 | | }; |
298 | | |
299 | | } |
300 | | } |
301 | | |
302 | | #endif |